package com.zhangmeng.online.exam.controller;

import com.zhangmeng.online.exam.dao.*;
import com.zhangmeng.online.exam.dto.Result;
import com.zhangmeng.online.exam.entity.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;

/**
 * @author zm
 * @date 2025/3/3 16:06
 * @version: 1.0
 */
@RestController
@RequestMapping("/init")
public class InitController {

    @Autowired
    private UserDao userDao;

    @Autowired
    private RoleDao roleDao;

    @Autowired
    private PermissionDao permissionDao;

    @RequestMapping("/data")
    public void initData() {

        Permission p1 = new Permission();
        p1.setName("用户管理");
        p1.setIcon("user");
        p1.setDescription("用户管理");
        p1.setSort(1);
        permissionDao.save(p1);

        Permission p2 = new Permission();
        p2.setName("用户列表");
        p2.setIcon("user-list");
        p2.setUrl("/user/list");
        p2.setDescription("用户列表");
        p2.setSort(2);
        p2.setFrontpath("/user/list");
        p2.setParent(p1);
        permissionDao.save(p2);

        Permission p3 = new Permission();
        p3.setName("角色管理");
        p3.setIcon("role-list");
        p3.setUrl("/role/list");
        p3.setDescription("角色管理");
        p3.setSort(3);
        p3.setFrontpath("/role/list");
        p3.setParent(p1);
        permissionDao.save(p3);

        Permission p4 = new Permission();
        p4.setName("权限管理");
        p4.setIcon("permission-list");
        p4.setUrl("/permission/list");
        p4.setDescription("权限管理");
        p4.setSort(4);
        p4.setFrontpath("/permission/list");
        p4.setParent(p1);
        permissionDao.save(p4);

        /****************************************************************************************************************************************/

        Permission p5 = new Permission();
        p5.setName("问题管理");
        p5.setIcon("question-manager");
        p5.setDescription("问题管理");
        p5.setSort(5);
        permissionDao.save(p5);

        Permission p6 = new Permission();
        p6.setName("问题列表");
        p6.setIcon("question-list");
        p6.setUrl("/question/list");
        p6.setDescription("问题列表");
        p6.setSort(6);
        p6.setFrontpath("/question/list");
        p6.setParent(p5);
        permissionDao.save(p6);


        Permission p7 = new Permission();
        p7.setName("职业管理");
        p7.setIcon("profession-manager");
        p7.setDescription("问题管理");
        p7.setSort(7);
        permissionDao.save(p7);

        Permission p8 = new Permission();
        p8.setName("职业列表");
        p8.setIcon("profession-list");
        p8.setUrl("/profession/list");
        p8.setDescription("职业列表");
        p8.setSort(8);
        p8.setFrontpath("/profession/list");
        p8.setParent(p7);
        permissionDao.save(p8);

        Permission p9 = new Permission();
        p9.setName("学科管理");
        p9.setIcon("subject-manager");
        p9.setDescription("学科管理");
        p9.setSort(9);
        permissionDao.save(p9);


        Permission p10 = new Permission();
        p10.setName("学科列表");
        p10.setIcon("subject-list");
        p10.setUrl("/subject/list");
        p10.setDescription("学科列表");
        p10.setSort(10);
        p10.setFrontpath("/subject/list");
        p10.setParent(p9);
        permissionDao.save(p10);


        Role role = new Role();
        role.setName("管理员");
        role.setType(Role.Type.ADMIN);
        role.setDescription("管理员");
        role.getPermissions().add(p1);
        role.getPermissions().add(p2);
        role.getPermissions().add(p3);
        role.getPermissions().add(p4);
        role.getPermissions().add(p5);
        role.getPermissions().add(p6);
        role.getPermissions().add(p7);
        role.getPermissions().add(p8);
        role.getPermissions().add(p9);
        role.getPermissions().add(p10);
        roleDao.save(role);

        User admin = new User();
        admin.setUsername("admin");
        admin.setPassword(encoder());
        admin.setEmail("admin@admin.com");
        admin.setPhone("13800138000");
        admin.getRoles().add(role);
        admin.setStatus(User.Status.VALID);
        userDao.save(admin);

        User user = new User();
        user.setUsername("student");
        user.setPassword(encoder());
        user.setEmail("admin@admin.com");
        user.setPhone("13800138000");
        user.setStatus(User.Status.VALID);
        userDao.save(user);

        subjectInitData();
    }

    public static String  encoder(){
        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
        return encoder.encode("123456");
    }

    @Autowired
    private SubjectDao subjectDao;

    @GetMapping("/subject/init")
    public void subjectInit() {
        subjectInitData();
    }

    // 学科管理初始化数据
    public void subjectInitData() {

        Subject subject = new Subject();
        subject.setName("语文");
        subject.setCode("001");
        subjectDao.save(subject);

        Subject subject1 = new Subject();
        subject1.setName("数学");
        subject1.setCode("002");
        subjectDao.save(subject1);

        Subject subject2 = new Subject();
        subject2.setName("英语");
        subject2.setCode("003");
        subjectDao.save(subject2);

        Subject subject3 = new Subject();
        subject3.setName("物理");
        subject3.setCode("004");
        subjectDao.save(subject3);

        Subject subject4 = new Subject();
        subject4.setName("化学");
        subject4.setCode("005");
        subjectDao.save(subject4);

        Subject subject5 = new Subject();
        subject5.setName("生物");
        subject5.setCode("006");
        subjectDao.save(subject5);

        Subject subject6 = new Subject();
        subject6.setName("历史");
        subject6.setCode("007");
        subjectDao.save(subject6);

        Subject subject7 = new Subject();
        subject7.setName("地理");
        subject7.setCode("008");
        subjectDao.save(subject7);

        Subject subject8 = new Subject();
        subject8.setName("政治");
        subject8.setCode("009");
        subjectDao.save(subject8);

        Subject subject9 = new Subject();
        subject9.setName("公共课");
        subject9.setCode("010");
        subjectDao.save(subject9);

        List<Subject> subjectList = subjectDao.findAll();
        professionInitData(subjectList);
    }

    @Autowired
    private ProfessionDao professionDao;

    // 职业管理初始化数据
    public void professionInitData(List<Subject> subjectList) {

        Profession profession = new Profession();
        profession.setName("学生");
        profession.setSubjects(subjectList);
        professionDao.save(profession);

        questionInitData();
    }

    @Autowired
    private QuestionDao questionDao;

    @Autowired
    private QuestionOptionDao questionOptionDao;

    @GetMapping("/question")
    public void questionInit() {
        questionInitData();
    }

    // 问题管理初始化数据
    public void questionInitData() {

        Subject subject = this.subjectDao.findByCode("001");
        Profession profession = subject.getProfession();

        /**
         * 题目‌：下列文学常识表述错误的一项是（ ）
         * A.《骆驼祥子》中祥子失去土地后流落到北平城拉车
         * B.《朝花夕拾》原名《旧事重提》，收录了鲁迅的10篇回忆性散文
         * C.《水浒传》中“智取生辰纲”的故事与吴用、林冲等人相关
         * D.《战国策》由西汉刘向整理编辑，共三十三篇
         * ‌答案‌：C
         * ‌解析‌：“智取生辰纲”的主要策划者是吴用，参与者包括晁盖、公孙胜等，林冲并未参与此事‌
         */
        Question question = new Question();
        question.setSubject(subject);
        question.setType(Question.Type.SINGLE_CHOICE);
        question.setName("下列文学常识表述错误的一项是（ ）");
        this.questionDao.save(question);

        QuestionOption optionA = new QuestionOption();
        optionA.setQuestion(question);
        optionA.setOptionName("A.");
        optionA.setOptionContent("《骆驼祥子》中祥子失去土地后流落到北平城拉车");
        optionA.setOptionOrder(1);
        optionA.setIsAnswer(false);
        this.questionOptionDao.save(optionA);

        QuestionOption optionB = new QuestionOption();
        optionB.setQuestion(question);
        optionB.setOptionName("B.");
        optionB.setOptionContent("《朝花夕拾》原名《旧事重提》，收录了鲁迅的10篇回忆性散文");
        optionB.setOptionOrder(2);
        optionB.setIsAnswer(false);
        this.questionOptionDao.save(optionB);

        QuestionOption optionC = new QuestionOption();
        optionC.setQuestion(question);
        optionC.setOptionName("C.");
        optionC.setOptionContent("《水浒传》中“智取生辰纲”的故事与吴用、林冲等人相关");
        optionC.setOptionOrder(3);
        optionC.setIsAnswer(true);
        optionC.setExplanation("“智取生辰纲”的主要策划者是吴用，参与者包括晁盖、公孙胜等，林冲并未参与此事");
        this.questionOptionDao.save(optionC);

        QuestionOption optionD = new QuestionOption();
        optionD.setQuestion(question);
        optionD.setOptionName("D.");
        optionD.setOptionContent("《战国策》由西汉刘向整理编辑，共三十三篇");
        optionD.setOptionOrder(4);
        optionD.setIsAnswer(false);
        this.questionOptionDao.save(optionD);

        question.setOptions(Arrays.asList(optionA, optionB, optionC, optionD));

        /**
         * 题目‌：《骆驼祥子》中祥子买第一辆洋车用了多长时间？（ ）
         * A.三年 B.四年 C.两年 D.五年
         * ‌答案‌：A
         * ‌解析‌：祥子通过省吃俭用，历时三年才攒够钱购买第一辆车‌
         */
        question = new Question();
        question.setSubject(subject);
        question.setType(Question.Type.SINGLE_CHOICE);
        question.setName("《骆驼祥子》中祥子买第一辆洋车用了多长时间？（ ）");
        this.questionDao.save(question);

        optionA = new QuestionOption();
        optionA.setQuestion(question);
        optionA.setOptionName("A.");
        optionA.setOptionContent("三年");
        optionA.setOptionOrder(1);
        optionA.setIsAnswer(false);
        this.questionOptionDao.save(optionA);

        optionB = new QuestionOption();
        optionB.setQuestion(question);
        optionB.setOptionName("B.");
        optionB.setOptionContent("四年");
        optionB.setOptionOrder(2);
        optionB.setIsAnswer(false);
        this.questionOptionDao.save(optionB);

        optionC = new QuestionOption();
        optionC.setQuestion(question);
        optionC.setOptionName("C.");
        optionC.setOptionContent("两年");
        optionC.setOptionOrder(3);
        optionC.setIsAnswer(false);
        this.questionOptionDao.save(optionC);

        optionD = new QuestionOption();
        optionD.setQuestion(question);
        optionD.setOptionName("D.");
        optionD.setOptionContent("五年");
        optionD.setOptionOrder(4);
        optionD.setIsAnswer(true);
        optionD.setExplanation("祥子通过省吃俭用，历时三年才攒够钱购买第一辆车");
        this.questionOptionDao.save(optionD);

        question.setOptions(Arrays.asList(optionA, optionB, optionC, optionD));

        /**
         * 题目‌：《水浒传》中“白骨精”是指哪个角色？（ ）
         * A.杨过 B.郭靖 C.黄蓉 D.张无忌
         * ‌答案‌：C
         * ‌解析‌：“白骨精”指的是张无忌，他在《水浒传》中扮演的角色是“白骨精”‌
         */
        question = new Question();
        question.setSubject(subject);
        question.setType(Question.Type.SINGLE_CHOICE);
        question.setName("《水浒传》中“白骨精”是指哪个角色？（ ）");
        this.questionDao.save(question);

        optionA = new QuestionOption();
        optionA.setQuestion(question);
        optionA.setOptionName("A.");
        optionA.setOptionContent("杨过");
        optionA.setOptionOrder(1);
        optionA.setIsAnswer(false);
        this.questionOptionDao.save(optionA);

        optionB = new QuestionOption();
        optionB.setQuestion(question);
        optionB.setOptionName("B.");
        optionB.setOptionContent("郭靖");
        optionB.setOptionOrder(2);
        optionB.setIsAnswer(false);
        this.questionOptionDao.save(optionB);

        optionC = new QuestionOption();
        optionC.setQuestion(question);
        optionC.setOptionName("C.");
        optionC.setOptionContent("黄蓉");
        optionC.setOptionOrder(3);
        optionC.setIsAnswer(false);
        this.questionOptionDao.save(optionC);

        optionD = new QuestionOption();
        optionD.setQuestion(question);
        optionD.setOptionName("D.");
        optionD.setOptionContent("张无忌");
        optionD.setOptionOrder(4);
        optionD.setIsAnswer(true);
        optionD.setExplanation("“白骨精”指的是张无忌，他在《水浒传》中扮演的角色是“白骨精”");
        this.questionOptionDao.save(optionD);

        question.setOptions(Arrays.asList(optionA, optionB, optionC, optionD));

        /**
         * ‌题目‌：异地恋时，下列哪句诗最能表达思念之情？（ ）
         * A.泪眼问花花不语，乱红飞过秋千去
         * B.江南无所有，聊赠一枝春
         * C.孤帆远影碧空尽，唯见长江天际流
         * D.离恨恰如春草，更行更远还生
         * ‌答案‌：D
         * ‌解析‌：D选项以春草蔓延比喻离愁的绵长，契合异地相思的意境；B选项侧重赠物表心意，非专指思念‌
         */
        question = new Question();
        question.setSubject(subject);
        question.setType(Question.Type.SINGLE_CHOICE);
        question.setName("异地恋时，下列哪句诗最能表达思念之情？（ ）");
        this.questionDao.save(question);

        optionA = new QuestionOption();
        optionA.setQuestion(question);
        optionA.setOptionName("A.");
        optionA.setOptionContent("泪眼问花花不语，乱红飞过秋千去");
        optionA.setOptionOrder(1);
        optionA.setIsAnswer(false);
        this.questionOptionDao.save(optionA);

        optionB = new QuestionOption();
        optionB.setQuestion(question);
        optionB.setOptionName("B.");
        optionB.setOptionContent("离恨恰如春草，更行更远还生");
        optionB.setOptionOrder(2);
        optionB.setIsAnswer(false);
        this.questionOptionDao.save(optionB);

        optionC = new QuestionOption();
        optionC.setQuestion(question);
        optionC.setOptionName("C.");
        optionC.setOptionContent("春风十里不如你，江南岸边月下柳");
        optionC.setIsAnswer(false);
        this.questionOptionDao.save(optionC);

        optionD = new QuestionOption();
        optionD.setQuestion(question);
        optionD.setOptionName("D.");
        optionD.setOptionContent("泪眼问花花不语，乱红飞过秋千去");
        optionD.setOptionOrder(4);
        optionD.setIsAnswer(true);
        optionD.setExplanation("D选项以春草蔓延比喻离愁的绵长，契合异地相思的意境；B选项侧重赠物表心意，非专指思念");
        this.questionOptionDao.save(optionD);

        question.setOptions(Arrays.asList(optionA, optionB, optionC, optionD));
        /**
         * 题目‌：“接天莲叶无穷碧，映日荷花别样红”主要表达什么情感？（ ）
         * A.对自然美景的赞叹
         * B.对离别的伤感
         * C.对丰收的期待
         * D.对时光流逝的感慨
         * ‌答案‌：A
         * ‌解析‌：诗句通过描绘莲叶与荷花的壮丽色彩，展现诗人对西湖风光的喜爱‌
         */
        question = new Question();
        question.setSubject(subject);
        question.setType(Question.Type.SINGLE_CHOICE);
        question.setName("“接天莲叶无穷碧，映日荷花别样红”主要表达什么情感？（ ）");
        this.questionDao.save(question);

        optionA = new QuestionOption();
        optionA.setQuestion(question);
        optionA.setOptionName("A.");
        optionA.setOptionContent("对自然美景的赞叹");
        optionA.setOptionOrder(1);
        optionA.setIsAnswer(true);
        optionA.setExplanation("诗句通过描绘莲叶与荷花的壮丽色彩，展现诗人对西湖风光的喜爱");
        this.questionOptionDao.save(optionA);

        optionB = new QuestionOption();
        optionB.setQuestion(question);
        optionB.setOptionName("B.");
        optionB.setOptionContent("对离别的伤感");
        optionB.setOptionOrder(2);
        optionB.setIsAnswer(false);
        this.questionOptionDao.save(optionB);

        optionC = new QuestionOption();
        optionC.setQuestion(question);
        optionC.setOptionName("C.");
        optionC.setOptionContent("对丰收的期待");
        optionC.setOptionOrder(3);
        optionC.setIsAnswer(false);
        this.questionOptionDao.save(optionC);

        optionD = new QuestionOption();
        optionD.setQuestion(question);
        optionD.setOptionName("D.");
        optionD.setOptionContent("对时光流逝的感慨");
        optionD.setOptionOrder(4);
        optionD.setIsAnswer(false);
        this.questionOptionDao.save(optionD);

        question.setOptions(Arrays.asList(optionA, optionB, optionC, optionD));


        /**
         * 题目‌：下列句子没有语病的是（ ）
         * A.记者发现，中国人不爱喝牛奶的原因是饮食习惯未改变所致
         * B.我们必须站在实践科学发展观的高度统筹规划农业
         * C.从食堂到宿舍的煤屑路在没有月光的晚上阴森可怕
         * D.人口增加导致滥伐林木等问题，造成物种濒危
         * ‌答案‌：C
         * ‌解析‌：A选项“原因”与“所致”重复；B选项缺少“构建和谐社会”等搭配；D选项“导致”与“造成”语义重复‌
         */
        question = new Question();
        question.setSubject(subject);
        question.setType(Question.Type.SINGLE_CHOICE);
        question.setName("下列句子没有语病的是（ ）");
        this.questionDao.save(question);

        optionA = new QuestionOption();
        optionA.setQuestion(question);
        optionA.setOptionName("A.");
        optionA.setOptionContent("原因");
        optionA.setOptionOrder(1);
        optionA.setIsAnswer(false);
        this.questionOptionDao.save(optionA);

        optionB = new QuestionOption();
        optionB.setQuestion(question);
        optionB.setOptionName("B.");
        optionB.setOptionContent("我们必须站在实践科学发展观的高度统筹规划农业");
        optionB.setOptionOrder(2);
        optionB.setIsAnswer(false);
        this.questionOptionDao.save(optionB);

        optionC = new QuestionOption();
        optionC.setQuestion(question);
        optionC.setOptionName("C.");
        optionC.setOptionContent("从食堂到宿舍的煤屑路在没有月光的晚上阴森可怕");
        optionC.setOptionOrder(3);
        optionC.setIsAnswer(true);
        optionC.setExplanation("从食堂到宿舍的煤屑路在没有月光的晚上阴森可怕，说明人们对自然环境的恐惧");
        this.questionOptionDao.save(optionC);

        optionD = new QuestionOption();
        optionD.setQuestion(question);
        optionD.setOptionName("D.");
        optionD.setOptionContent("人口增加导致滥伐林木等问题，造成物种濒危");
        optionD.setOptionOrder(4);
        optionD.setIsAnswer(false);
        this.questionOptionDao.save(optionD);

        question.setOptions(Arrays.asList(optionA, optionB, optionC, optionD));

        /**
         * 题目‌：下列句子中画线成语使用恰当的是（ ）
         * A.救灾物资络绎不绝地运往灾区
         * B.他总爱在会议上发表明日黄花的观点
         * C.这场辩论赛双方针锋相对，难分高下
         * D.听到获奖消息，他激动得手舞足蹈
         * ‌答案‌：C
         * ‌解析‌：A选项“络绎不绝”形容人流而非物资；B选项“明日黄花”比喻过时事物，含贬义，与“观点”搭配不当；D选项“手舞足蹈”多形容儿童，与成人获奖场景不协调‌
         */
        question = new Question();
        question.setSubject(subject);
        question.setType(Question.Type.SINGLE_CHOICE);
        question.setName("下列句子中画线成语使用恰当的是（ ）");
        this.questionDao.save(question);


        optionA = new QuestionOption();
        optionA.setQuestion(question);
        optionA.setOptionName("A.");
        optionA.setOptionContent("救灾物资络绎不绝地运往灾区");
        optionA.setOptionOrder(1);
        optionA.setIsAnswer(false);
        this.questionOptionDao.save(optionA);

        optionB = new QuestionOption();
        optionB.setQuestion(question);
        optionB.setOptionName("B.");
        optionB.setOptionContent("他总爱在会议上发表明日黄花的观点");
        optionB.setOptionOrder(2);
        optionB.setIsAnswer(false);
        this.questionOptionDao.save(optionB);

        optionC = new QuestionOption();
        optionC.setQuestion(question);
        optionC.setOptionName("C.");
        optionC.setOptionContent("这场辩论赛双方针锋相对，难分高下");
        optionC.setOptionOrder(3);
        optionC.setIsAnswer(true);
        optionC.setExplanation("这场辩论赛双方针锋相对，难分高下，说明双方观点不一致");
        this.questionOptionDao.save(optionC);

        optionD = new QuestionOption();
        optionD.setQuestion(question);
        optionD.setOptionName("D.");
        optionD.setOptionContent("听到获奖消息，他激动得手舞足蹈");
        optionD.setOptionOrder(4);
        optionD.setIsAnswer(false);
        this.questionOptionDao.save(optionD);

        question.setOptions(Arrays.asList(optionA, optionB, optionC, optionD));

        /**
         * 题目‌：下列句子中不属于语病的是（ ）
         * A.这位老师的讲课风格独特，深受学生喜爱
         * B.他的课堂气氛活跃，学生们都很投入
         * C.这位同学的作文写得很好，文章结构清晰
         * D.这位老师的授课方式循序渐进，学生能学到知识
         * ‌答案‌：B
         * ‌解析‌：A选项“风格”与“独特”搭配不当；C选项“写得”与“文章”搭配不当；D选项“循序渐进”与“能学到”搭配不当‌
         */
        question = new Question();
        question.setSubject(subject);
        question.setType(Question.Type.SINGLE_CHOICE);
        question.setName("下列句子中不属于语病的是（ ）");
        this.questionDao.save(question);

        optionA = new QuestionOption();
        optionA.setQuestion(question);
        optionA.setOptionName("A.");
        optionA.setOptionContent("这位老师的讲课风格独特，深受学生喜爱");
        optionA.setOptionOrder(1);
        optionA.setIsAnswer(false);
        this.questionOptionDao.save(optionA);

        optionB = new QuestionOption();
        optionB.setQuestion(question);
        optionB.setOptionName("B.");
        optionB.setOptionContent("他的课堂气氛活跃，学生们都很投入");
        optionB.setOptionOrder(2);
        optionB.setIsAnswer(true);
        optionB.setExplanation("他的课堂气氛活跃，学生们都很投入，说明教师的教学方式符合学生的学习需求");
        this.questionOptionDao.save(optionB);

        optionC = new QuestionOption();
        optionC.setQuestion(question);
        optionC.setOptionName("C.");
        optionC.setOptionContent("这位同学的作文写得很好，文章结构清晰");
        optionC.setOptionOrder(3);
        optionC.setIsAnswer(false);
        this.questionOptionDao.save(optionC);

        optionD = new QuestionOption();
        optionD.setQuestion(question);
        optionD.setOptionName("D.");
        optionD.setOptionContent("这位老师的授课方式循序渐进，学生能学到知识");
        optionD.setOptionOrder(4);
        optionD.setIsAnswer(false);
        this.questionOptionDao.save(optionD);

        question.setOptions(Arrays.asList(optionA, optionB, optionC, optionD));

        test1();
        test2();
        test3();
        test4();
        test6();
        test7();

    }


    @GetMapping("/test1")
    public void test1() {

        Role role = this.roleDao.findById(1L).get();

        Permission p = new Permission();
        p.setName("选项管理");
        p.setDescription("选项管理");
        p.setSort(3);
        p.setFrontpath("/role/list");
        p.setRoles(new HashSet<>(List.of(role)));
        permissionDao.save(p);

        Permission p3 = new Permission();
        p3.setName("选项管理");
        p3.setIcon("option-list");
        p3.setUrl("/option/list");
        p3.setDescription("角色管理");
        p3.setSort(3);
        p3.setFrontpath("/option/list");
        p3.setParent(p);
        permissionDao.save(p3);

    }

    @Autowired
    private PaperDao paperDao;


    @GetMapping("/test2")
    public void test2() {

        Subject subject = this.subjectDao.findByCode("001");
        User admin = this.userDao.getById(1L);

        Paper paper = new Paper();
        paper.setName("测试试卷");
        paper.setSubject(subject);
        paper.setTotalScore(100);
        paper.setCreator(admin);
        paper.setStatus(0);
        paper.setExamTime(120);
        paper.setDescription("测试试卷");
        paper.setPassScore(60);
        paperDao.save(paper);

    }

    @GetMapping("/test3")
    public void test3() {
        Permission permission = new Permission();
        permission.setName("试卷管理");
        permission.setDescription("试卷管理");
        permissionDao.save(permission);

        Permission permission2 = new Permission();
        permission2.setName("试卷列表");
        permission2.setIcon("paper-list");
        permission2.setUrl("/paper/list");
        permission2.setDescription("试卷列表");
        permission2.setSort(3);
        permission2.setFrontpath("/paper/list");
        permission2.setParent(permission);
        permissionDao.save(permission2);

        Role role = this.roleDao.findById(1L).get();
        role.getPermissions().add(permission);
        role.getPermissions().add(permission2);
        roleDao.save(role);
    }

    @GetMapping("/test4")
    public void test4() {
        Subject subject = this.subjectDao.findByCode("001");

        Question question = new Question();
        question.setSubject(subject);
        question.setType(Question.Type.JUDGMENT);
        question.setName("JavaFX 是 Oracle 官方提供的 GUI 框架吗？");
        this.questionDao.save(question);

        QuestionOption optionA = new QuestionOption();
        optionA.setQuestion(question);
        optionA.setOptionName("A.");
        optionA.setOptionContent("正确");
        optionA.setOptionOrder(1);
        optionA.setIsAnswer(true);
        this.questionOptionDao.save(optionA);

        QuestionOption optionB = new QuestionOption();
        optionB.setQuestion(question);
        optionB.setOptionName("B.");
        optionB.setOptionContent("错误");
        optionB.setOptionOrder(2);
        optionB.setIsAnswer(false);
        this.questionOptionDao.save(optionB);

        question.setOptions(Arrays.asList(optionA, optionB));

        question = new Question();
        question.setSubject(subject);
        question.setType(Question.Type.JUDGMENT);
        question.setName("“精兵简政”指精简机构以提高效率，减轻负担。");
        this.questionDao.save(question);

        optionA = new QuestionOption();
        optionA.setQuestion(question);
        optionA.setOptionName("A.");
        optionA.setOptionContent("正确");
        optionA.setOptionOrder(1);
        optionA.setIsAnswer(true);
        this.questionOptionDao.save(optionA);

        optionB = new QuestionOption();
        optionB.setQuestion(question);
        optionB.setOptionName("B.");
        optionB.setOptionContent("错误");
        optionB.setOptionOrder(2);
        optionB.setIsAnswer(false);
        this.questionOptionDao.save(optionB);

        question.setOptions(Arrays.asList(optionA, optionB));


        question = new Question();
        question.setSubject(subject);
        question.setType(Question.Type.JUDGMENT);
        question.setName("“知之为知之，不知为不知，是知也”出自《论语》，与孟子无关。");
        this.questionDao.save(question);

        optionA = new QuestionOption();
        optionA.setQuestion(question);
        optionA.setOptionName("A.");
        optionA.setOptionContent("正确");
        optionA.setOptionOrder(1);
        optionA.setIsAnswer(true);
        this.questionOptionDao.save(optionA);

        optionB = new QuestionOption();
        optionB.setQuestion(question);
        optionB.setOptionName("B.");
        optionB.setOptionContent("错误");
        optionB.setOptionOrder(2);
        optionB.setIsAnswer(false);
        this.questionOptionDao.save(optionB);

        question.setOptions(Arrays.asList(optionA, optionB));

        /**
         * 成语“玲珑剔透”可形容器物精致，也可比喻人精明灵活。
         */
        question = new Question();
        question.setSubject(subject);
        question.setType(Question.Type.JUDGMENT);
        question.setName("“玲珑剔透”可形容器物精致，也可比喻人精明灵活。");
        question.setExplanation("仅用于器物");
        this.questionDao.save(question);

        optionA = new QuestionOption();
        optionA.setQuestion(question);
        optionA.setOptionName("A.");
        optionA.setOptionContent("正确");
        optionA.setOptionOrder(1);
        optionA.setIsAnswer(false);
        this.questionOptionDao.save(optionA);

        optionB = new QuestionOption();
        optionB.setQuestion(question);
        optionB.setOptionName("B.");
        optionB.setOptionContent("错误");
        optionB.setOptionOrder(2);
        optionB.setIsAnswer(false);
        this.questionOptionDao.save(optionB);

        question.setOptions(Arrays.asList(optionA, optionB));

    }

    /**
     * currentQuestion.content = "简述面向对象编程的三大特性";
     * currentQuestion.keywords = Arrays.asList("封装", "继承", "多态");
     */
    @GetMapping("/test5")
    public void test6() {
        Subject subject = this.subjectDao.findByCode("001");

        Question question = new Question();
        question.setSubject(subject);
        question.setType(Question.Type.SHORT_ANSWER);
        question.setName("简述面向对象编程的三大特性");
        this.questionDao.save(question);

        QuestionOption optionA = new QuestionOption();
        optionA.setQuestion(question);
        optionA.setOptionName("A.");
        optionA.setOptionContent("封装");
        optionA.setOptionOrder(1);
        optionA.setIsAnswer(true);
        this.questionOptionDao.save(optionA);

        QuestionOption optionB = new QuestionOption();
        optionB.setQuestion(question);
        optionB.setOptionName("B.");
        optionB.setOptionContent("继承");
        optionB.setOptionOrder(2);
        optionB.setIsAnswer(true);
        this.questionOptionDao.save(optionB);

        QuestionOption optionC = new QuestionOption();
        optionC.setQuestion(question);
        optionC.setOptionName("B.");
        optionC.setOptionContent("多态");
        optionC.setOptionOrder(3);
        optionC.setIsAnswer(true);
        this.questionOptionDao.save(optionC);

        question.setOptions(Arrays.asList(optionA, optionB, optionC));

        question = new Question();
        question.setSubject(subject);
        question.setType(Question.Type.SHORT_ANSWER);
        question.setName("《朝花夕拾》中鲁迅回忆藤野先生的目的是什么？");
        this.questionDao.save(question);

        optionA = new QuestionOption();
        optionA.setQuestion(question);
        optionA.setOptionName("A.");
        optionA.setOptionContent("汲取精神力量");
        optionA.setOptionOrder(1);
        optionA.setIsAnswer(true);
        this.questionOptionDao.save(optionA);

        optionB = new QuestionOption();
        optionB.setQuestion(question);
        optionB.setOptionName("B.");
        optionB.setOptionContent("封建势力");
        optionB.setOptionOrder(2);
        optionB.setIsAnswer(true);
        this.questionOptionDao.save(optionB);

        optionC = new QuestionOption();
        optionC.setQuestion(question);
        optionC.setOptionName("C.");
        optionC.setOptionContent("虚伪");
        optionC.setOptionOrder(3);
        optionC.setIsAnswer(true);
        this.questionOptionDao.save(optionC);

        QuestionOption optionD = new QuestionOption();
        optionD.setQuestion(question);
        optionD.setOptionName("D.");
        optionD.setOptionContent("正人君子");
        optionD.setOptionOrder(4);
        optionD.setIsAnswer(true);
        this.questionOptionDao.save(optionD);

        question.setOptions(Arrays.asList(optionA, optionB, optionC,optionD));
    }

    @GetMapping("/test7")
    public void test7() {
        Optional<User> userOptional = this.userDao.findById(2L);
        if (userOptional.isPresent()){
            User user = userOptional.get();
            Role role = new Role();
            role.setName("学生");
            role.setDescription("学生");
            role.setType(Role.Type.STUDENT);
            roleDao.save(role);
            user.getRoles().add(role);
            userDao.save(user);

            Permission permission = new Permission();
            permission.setName("试题管理");
            permission.setDescription("试题管理");
            permissionDao.save(permission);

            Permission permission2 = new Permission();
            permission2.setName("试题列表");
            permission2.setDescription("试题列表");
            permission2.setUrl("/exam/list");
            permission2.setIcon("exam-list");
            permission2.setSort(2);
            permission2.setFrontpath("/exam/list");
            permission2.setParent(permission);
            permissionDao.save(permission2);

            role.getPermissions().add(permission);
            role.getPermissions().add(permission2);
            roleDao.save(role);


        }
    }


    @RequestMapping("/test8")
    public void test8() {

        List<Permission> all = this.permissionDao.findAll();

        Role role = this.roleDao.findById(1L).get();
        role.getPermissions().clear();
        role.getPermissions().addAll(all);
        roleDao.save(role);

    }
}
